package leetcode_day._2021._202112._1120;

/**
 * @author yzh
 * @version 1.0
 * @date 2021/12/18 23:25
 * 甲板上的战舰
 * 给你一个大小为 m x n 的矩阵 board 表示甲板，其中，每个单元格可以是一艘战舰 'X' 或者是一个空位 '.' ，返回在甲板 board 上放置的 战舰 的数量。
 * 战舰 只能水平或者垂直放置在 board 上。换句话说，战舰只能按 1 x k（1 行，k 列）或 k x 1（k 行，1 列）的形状建造，
 * 其中 k 可以是任意大小。两艘战舰之间至少有一个水平或垂直的空位分隔 （即没有相邻的战舰）。
 * 算法：数组、脑筋急转弯
 * 判断当前 X 是不是第一个 X
 * 当前位置是 X，并且上方或者左边不是 X 时，那么就 +1
 */
public class _18_419 {
    public static void main(String[] args) {
        char[][] board = new char[][]{{'X', 'X', '.', 'X'}, {'.', '.', '.', 'X'}, {'.', '.', '.', 'X'}};
        System.out.println(new _18_419().countBattleships(board));
    }

    public int countBattleships(char[][] board) {
        int ans = 0;
        int m = board.length, n = board[0].length;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (board[i][j] == 'X') {
                    ++ans;
                    for (int tmp = i; tmp < m; tmp++) {
                        if (board[tmp][j] == 'X') board[tmp][j] = '.';
                        else break;
                    }
                    for (int tmp = j + 1; tmp < n; tmp++) {
                        if (board[i][tmp] == 'X') board[i][tmp] = '.';
                        else break;
                    }
                }
            }
        }
        return ans;
    }

    public int countBattleships_perfect(char[][] board) {
        int ans = 0;
        int m = board.length, n = board[0].length;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (i > 0 && board[i - 1][j] == 'X') continue;
                if (j > 0 && board[i][j - 1] == 'X') continue;
                if (board[i][j] == 'X') ++ans;
            }
        }
        return ans;
    }

}
